package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IStatisticsPageDao;
import org.jsola.hr.query.*;
import org.jsola.hr.vo.*;
import org.jsola.hr.vo.excel.ChildCompanyExportVO;
import org.jsola.hr.vo.excel.GroupCompanyExportVO;
import org.jsola.hr.vo.permission.RoleMemberVO;
import org.jsola.log.vo.ServiceLogListVO;
import org.jsola.user.core.TokenUser;

import java.io.InputStream;
import java.util.List;

public interface IStatisticsPageService extends IService<IStatisticsPageDao, StatisticsPageVO> {

    /**
     * 今日新增员工导出
     *
     * @param statisicsPageEmpExportQuery 导出参数
     * @param tokenUser                   当前用户
     * @return excel输入流
     */
    InputStream todayAddExport(StatisicsPageEmpExportQuery statisicsPageEmpExportQuery, TokenUser tokenUser);

    /**
     * 子公司,用工单位,员工数量统计
     *
     * @param tokenUser  当前用户
     * @param companyIds 公司Id
     * @param type       类型(company:用工单位,site:租户,group:用工单位分组)
     * @return 数量信息
     */
    StatisticsPageVO selectStatisticsCount(String companyIds, String type, TokenUser tokenUser);

    /**
     * 企业总览,用工单位概览
     *
     * @param tokenUser    当前用户
     * @param companyQuery 查询参数
     * @return 用工单位
     */
    Page<CompanyListVO> selectCompanyAndEmpCount(TokenUser tokenUser, CompanyQuery companyQuery);


    /**
     * 企业总览,用工单位概览
     *
     * @param tokenUser    当前用户
     * @param companyQuery 查询参数
     * @return 用工单位
     */
    List<CompanyListVO> selectAll(TokenUser tokenUser, CompanyQuery companyQuery);

    /**
     * 员工概览
     *
     * @param empBySiteQuery 查询参数
     * @param tokenUser      当前用户
     * @return 员工概览
     */
    Page<StatisticsEmpInfoVO> selectAllStaff(EmpBySiteQuery empBySiteQuery, TokenUser tokenUser);


    /**
     * 查询员工位置列表方法
     *
     * @param empBySiteQuery 条件
     * @param tokenUser      登陆人
     * @return list
     */
    List<StatisticsEmpInfoVO> selectAllStaffList(EmpBySiteQuery empBySiteQuery, TokenUser tokenUser);

    /**
     * 企业端,子公司概览
     *
     * @param name      关键字搜索参数
     * @param tokenUser 当前用户
     * @param ids       关键字搜索参数
     * @return 子公司
     */
    List<ChildCompanyExportVO> getAllChildComanyWithAdminForExport(String name, TokenUser tokenUser, List<String> ids);

    /**
     * @return java.util.List<org.jsola.hr.vo.excel.ChildCompanyExportVO>
     * @Author
     * @Description
     * @Date 13:44 2020-10-27
     * @Param [exportList, tokenUser]
     **/
    List<ChildCompanyExportVO> listAllChildComanyWithAdmin(List<ChildCompanyExportVO> exportList, TokenUser tokenUser);

    /**
     * @return org.jsola.core.Page<org.jsola.hr.vo.EmpContractInfoVO>
     * @Author
     * @Description
     * @Date 13:44 2020-10-27
     * @Param [empInfoQuery, tokenUser]
     **/
    Page<EmpContractInfoVO> empContractInfoList(EmpInfoQuery empInfoQuery, TokenUser tokenUser);

    /**
     * @return java.util.List<org.jsola.hr.vo.ChildCompanyListVO>
     * @Author
     * @Description
     * @Date 13:44 2020-10-27
     * @Param [childCompanyQuery, siteId]
     **/
    List<ChildCompanyListVO> select(ChildCompanyQuery childCompanyQuery, String siteId);

    /**
     * @return org.jsola.core.Page<org.jsola.hr.entity.GroupCityDO>
     * @Author
     * @Description
     * @Date 15:33 2020-10-27
     * @Param [childCompanyQuery, siteId]
     **/
    public List<CompanyVO> getSubCompany(ChildCompanyQuery childCompanyQuery, String siteId);

    List<RoleMemberVO> getChildCompanyAdmin(ChildCompanyQuery childCompanyQuery, TokenUser tokenUser);

    /**
     * 企业总览用工总览合同签约数
     *
     * @param statisticsContractQuery 查询条件
     * @param tokenUser               当前用户
     * @return 合同信息
     */
    List<StatisticsEmpInfoContractCountVO> getStatisticsEmpInfoContractCount(StatisticsContractQuery statisticsContractQuery, TokenUser tokenUser);

    /**
     * 企业总览员工学历占比
     *
     * @param tokenUser  当前用户
     * @param companyIds 公司Ids
     * @return 学历占比
     */
    EmpEduCountVO empEduCount(String companyIds, TokenUser tokenUser);

    /**
     * 企业端员工导出
     *
     * @param statisicsPageEmpExportQuery 导出参数
     * @param tokenUser                   当前用户
     * @return 文件名
     */
    String selectAllStaffExport(StatisicsPageEmpExportQuery statisicsPageEmpExportQuery, TokenUser tokenUser);

    /**
     * 企业端首页,子公司,用工单位,员工数量统计
     *
     * @param tokenUser  当前用户
     * @param companyIds 公司Id列表
     * @param type       类型(company:用工单位,site:租户,group:用工单位分组)
     * @return 统计数量信息
     */
    StatisticsPageVO selectCompanyAndEmpCountStatistics(String companyIds, String type, TokenUser tokenUser);

    /**
     * 企业端首页社保统计
     *
     * @param year       年
     * @param month      月
     * @param tokenUser  当前用户
     * @param companyIds 公司Id
     * @return 统计数量信息
     */
    StatisticsPageVO selectSocCount(String year, String month, String companyIds, TokenUser tokenUser);

    /**
     * 企业端首页查询员工操作日志
     *
     * @param serviceLogQuery 查询参数
     * @param tokenUser       当前用户
     * @return 操作日志
     */
    Page<ServiceLogListVO> selectServiceLog(ServiceLogFillQuery serviceLogQuery, TokenUser tokenUser);

    /**
     * 企业端首页员工统计
     *
     * @param tokenUser  当前用户
     * @param year       年
     * @param month      月
     * @param companyIds 公司Id
     * @return 统计信息
     */
    StatisticsPageVO selectHomeEmpCount(TokenUser tokenUser, String year, String month, String companyIds);

    /**
     * 更改租户Logo
     *
     * @param picUrl    logo地址
     * @param tokenUser 当前用户
     * @return 修改数量
     */
    int updateSitePic(String picUrl, TokenUser tokenUser);

    /**
     * 查询公司分组
     *
     * @param childCompanyQuery 公司分组查询参数
     * @param tokenUser         当前用户
     * @return 公司分组分页
     */
    Page<ChildCompanyVO> pageChildCompany(ChildCompanyQuery childCompanyQuery, TokenUser tokenUser);

    /**
     * 查询公司分组
     *
     * @param childCompanyQuery 公司分组查询参数
     * @param tokenUser         当前用户
     * @return 公司分组
     */
    List<ChildCompanyVO> listChildCompany(ChildCompanyQuery childCompanyQuery, TokenUser tokenUser);


    /**
     * 导出公司分组
     *
     * @param childCompanyQuery 公司分组查询参数
     * @param tokenUser         当前用户
     * @return 公司分组导出
     */
    List<GroupCompanyExportVO> exportChildCompany(ChildCompanyQuery childCompanyQuery, TokenUser tokenUser);
}
